var MaxQueue = function() {
  this.queue = [] // 创建一个队列 储存元素
  this.max = [] // 创建一个数组储存最大值
};

/**
 * @return {number}
 */
MaxQueue.prototype.max_value = function() {
  if(this.queue.length === 0) return -1 // 如果队列中没有元素 就返回-1
  return this.max[0] // 否则的话返回首个元素
};

/** 
 * @param {number} value
 * @return {void}
 */
MaxQueue.prototype.push_back = function(value) {
  this.queue.push(value) // 直接将元素插入队列
  if(this.max.length === 0){ // 如果数组没有元素 就直接插入
    this.max.push(value)
  }else{
    // 从后向前判断有没有比这个小的数有的话弹出 // 如果数组有元素 就逐步把小于value的值都弹出 不能是等于 只能小于 以防出现重复的情况
    while(this.max.length && this.max[this.max.length-1] < value){
      this.max.pop()
    }
    this.max.push(value) // 最后插入这个值
  }
};

/**
 * @return {number}
 */
MaxQueue.prototype.pop_front = function() {
  if(this.queue.length === 0) return -1 // 如果数组中没有元素 就返回-1
  if(this.max[0] === this.queue[0]){ // 如果最大值是当前最大值的首个元素 
    this.max.shift() // 就把这个元素弹出
  }
  return this.queue.shift() // 最后返回queue弹出的元素
};

/**
 * Your MaxQueue object will be instantiated and called as such:
 * var obj = new MaxQueue()
 * var param_1 = obj.max_value()
 * obj.push_back(value)
 * var param_3 = obj.pop_front()
 */